﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;

namespace EstoqueUnifeiADO.Dados
{
    public class EntradaMercadoriaController
    {
        private dsClientEntraMerca.EntraMercaDataTable EntradaMercadoria;
        private dsClientEntraMerca.EntraMercaItemDataTable Items;
        public EntradaMercadoriaController(dsClientEntraMerca.EntraMercaDataTable dadosentrada,
            dsClientEntraMerca.EntraMercaItemDataTable itemsentrada)
        {
            EntradaMercadoria = dadosentrada;
            Items = itemsentrada;
        }
        public void ExecutarEntradaMercadorias(string usuario)
        {
            SqlTransaction transaction = null;
            foreach (var item in EntradaMercadoria)
            {
                try
                {

                    using (dsEntradaMercadoriaTableAdapters.ENTRADAMERCADORIATableAdapter taEntra = new dsEntradaMercadoriaTableAdapters.ENTRADAMERCADORIATableAdapter())
                    {
                        transaction = TableAdapterHelper.BeginTransaction(taEntra);
                        int key = Convert.ToInt32(taEntra.InsertWithKey(item.Data, item.CodFornecedor, item.Numeronota,
                                item.IsNumeroempenhoNull() ? null : item.Numeroempenho,
                                item.IsNumeroProcessoNull() ? null : item.NumeroProcesso,
                                item.IsNumeroConfirmacaoNull() ? null : item.NumeroConfirmacao,
                                Items.Sum(x => x.total),
                                0,
                                Items.Sum(x => x.total), (item.IsNumeroConfirmacaoNull() == false)));
                        using (dsEntradaMercadoriaTableAdapters.ENTRADAMERCADORIAITEMTableAdapter taitem = new dsEntradaMercadoriaTableAdapters.ENTRADAMERCADORIAITEMTableAdapter())
                        {

                            TableAdapterHelper.SetTransaction(taitem, transaction);

                            foreach (var itemMerca in Items)
                            {
                                taitem.Insert(key, itemMerca.codProduto, itemMerca.quantidade, itemMerca.valor, itemMerca.total);

                            }

                        }

                        using (dsMovimentacaoTableAdapters.MOVIMENTOTableAdapter ta = new dsMovimentacaoTableAdapters.MOVIMENTOTableAdapter())
                        {
                            TableAdapterHelper.SetTransaction(ta, transaction);
                            var listaProdutos = Items.Select(x => new ProdQuant()
                            {
                                CodProduto = x.codProduto,
                                NomeProduto = x.produto,
                                Quantidade = x.quantidade
                            });
                            ta.MovimentaEstoque(listaProdutos.ToList(),
                                                 null, 
                                                 1,
                                                 "Entrada de mercadoria",
                                                 1,
                                                 null, 
                                                 (item.IsNumeroConfirmacaoNull() == false)?TipoMovimentacao.EntradaFapep:
                                                 TipoMovimentacao.EntraMercadoria, 
                                                 transaction);
                        }
                    }
                   
                    transaction.Commit();
                }
                catch (Exception)
                {
                    transaction.Rollback();
                    throw;
                }
                finally
                {
                    transaction.Dispose();
                }

            }
        }
    }
}